home *** CD-ROM | disk | FTP | other *** search
/ Acorn User: China / Acorn User China CD-ROM (UK) (Disc A) / Acorn User China CD-ROM (UK) (Disc A).bin / DEMON / DEVELOPER / TTFNSRC0.ZIP / c / KeyPress < prev    next >
Encoding:
Text File  |  1995-04-22  |  10.5 KB  |  475 lines

  1.  
  2. #include "DeskLib:WimpSWIs.h"
  3. #include "DeskLib:Window.h"
  4.  
  5. #include "DeskLib:Error.h"
  6. #include "DeskLib:Event.h"
  7. #include "DeskLib:Icon.h"
  8. #include "DeskLib:Core.h"
  9. #include "DeskLib:Handler.h"
  10. #include "DeskLib:File.h"
  11.  
  12. #include "DeskLib:KeyCodes.h"
  13.  
  14. #include "Globals.h"
  15. #include "ArtList.h"
  16. #include "Window.h"
  17. #include "Article.h"
  18. #include "ArtGen.h"
  19. #include "ReadFlag.h"
  20. #include "WimpMsgs.h"
  21. #include "UserManage.h"
  22. #include "Setup.h"
  23. #include "Misc.h"
  24. #include "Threads.h"
  25. #include "NewsGroups.h"
  26. #include "IconNums.h"
  27. #include "Panes.h"
  28. #include "Uucode.h"
  29.  
  30.  
  31. BOOL Keypress_PassOn(event_pollblock *event, void *reference)
  32. {
  33.   BOOL claimed;
  34.  
  35.   claimed=FALSE;
  36.  
  37.   if (event->data.key.caret.window == windows.newpost)
  38.   {
  39.     switch (event->data.key.code)
  40.     {
  41.       case keycode_RETURN:
  42.         Misc_ClickOK(windows.newpost,7);
  43.         Window_Hide(windows.newpost);
  44.         if (actionfollowup==TRUE)
  45.         {
  46.           ArtGen_BuildArticle(3, TRUE);
  47.         }
  48.         else
  49.         {
  50.           ArtGen_BuildArticle(2, FALSE);
  51.         }
  52.         claimed=TRUE;
  53.         break;
  54.  
  55.       case keycode_ESCAPE:
  56.         Window_Hide(windows.newpost);
  57.         claimed=TRUE;
  58.         break;
  59.     }
  60.   }
  61.  
  62.   if (event->data.key.caret.window == windows.setupw)
  63.   {
  64.     switch (event->data.key.code)
  65.     {
  66.       case keycode_RETURN:
  67.         Misc_ClickOK(windows.setupmaster, Setup_OK);
  68.         CloseandAction_Setup(event, Setup_OK, TRUE);
  69.         claimed=TRUE;
  70.         break;
  71.  
  72.       case keycode_ESCAPE:
  73.         Panes_Hide(windows.setupw, windows.setupmaster);
  74.         claimed=TRUE;
  75.         break;
  76.     }
  77.   }
  78.  
  79.   if (event->data.key.caret.window == windows.useredit)
  80.   {
  81.     switch (event->data.key.code)
  82.     {
  83.       case keycode_RETURN:
  84.         switch(event->data.key.caret.icon)
  85.         {
  86.           case 7:
  87.             Misc_ClickOK(windows.useredit,4);
  88.             UserManage_WriteRLN();
  89.             claimed=TRUE;
  90.             break;
  91.  
  92.           case 17:
  93.             Misc_ClickOK(windows.useredit,18);
  94.             UserManage_CreateUser();
  95.             claimed=TRUE;
  96.             break;
  97.         }
  98.         break;
  99.  
  100.       case keycode_ESCAPE:
  101.         Window_Hide(windows.useredit);
  102.         claimed=TRUE;
  103.         break;
  104.     }
  105.   }
  106.  
  107.   if (event->data.key.caret.window == windows.postconf)
  108.   {
  109.     switch (event->data.key.code)
  110.     {
  111.       case keycode_RETURN:
  112.         Misc_ClickOK(windows.postconf, 2);
  113.         Window_Hide(windows.postconf);
  114.         WimpMsgs_TransportArticle("<Wimp$ScrapDir>.TTFN_Work");
  115.         break;
  116.  
  117.       case keycode_ESCAPE:
  118.         Window_Hide(windows.postconf);
  119.         File_Delete("<Wimp$ScrapDir>.TTFN_Work");
  120.         break;
  121.  
  122.       case 'r':
  123.       case 'R':
  124.         Misc_ClickOK(windows.postconf, 3);
  125.         Window_Hide(windows.postconf);
  126.         WimpMsgs_DataOpen("<Wimp$ScrapDir>.TTFN_Work", TRUE, FALSE);
  127.         break;
  128.     }
  129.   }
  130.  
  131.   if (event->data.key.caret.window == windows.newemail)
  132.   {
  133.     switch (event->data.key.code)
  134.     {
  135.       case keycode_RETURN:
  136.         Misc_ClickOK(windows.newemail,9);
  137.         Window_Hide(windows.newemail);
  138.         if (actionreply==TRUE)
  139.         {
  140.           ArtGen_BuildArticle(4, TRUE);
  141.         }
  142.         else
  143.         {
  144.           ArtGen_BuildArticle(1, FALSE);
  145.         }
  146.         claimed=TRUE;
  147.         break;
  148.  
  149.       case keycode_ESCAPE:
  150.         Window_Hide(windows.newemail);
  151.         claimed=TRUE;
  152.         break;
  153.     }
  154.   }
  155.  
  156.   if ((event->data.key.caret.window == windows.threads) ||
  157.           (event->data.key.caret.window == windows.articles) ||
  158.           (event->data.key.caret.window == windows.groups))
  159.   {
  160.     window_handle window;
  161.  
  162.     window=event->data.key.caret.window;
  163.     switch(event->data.key.code)
  164.     {
  165.       case keycode_CURSORUP:
  166.         if (window!=windows.groups)
  167.         {
  168.           Window_ScrollUp(window, 32);
  169.         }
  170.         else
  171.         {
  172.           Window_ScrollUp(window, 40);
  173.         }
  174.         claimed=TRUE;
  175.         break;
  176.  
  177.       case keycode_CURSORDOWN:
  178.         if (window!=windows.groups)
  179.         {
  180.           Window_ScrollDown(window, 32);
  181.         }
  182.         else
  183.         {
  184.           Window_ScrollDown(window, 40);
  185.         }
  186.         claimed=TRUE;
  187.         break;
  188.  
  189.       case 'r':
  190.       case 'R':
  191.         NewsGroups_SetWindowExtent(NewsGroups_CountSubscribedGroups(), 1064);
  192.         claimed=TRUE;
  193.         break;
  194.  
  195.       case keycode_PAGEUP:
  196.         Window_PageUp(window);
  197.         claimed=TRUE;
  198.         break;
  199.  
  200.       case keycode_PAGEDOWN:
  201.         Window_PageDown(window);
  202.         claimed=TRUE;
  203.         break;
  204.  
  205.       case keycode_HOME:
  206.       case keycode_CTRL_CURSORUP:
  207.         Window_SetScroll(window,Window_GetScrollX(window),0);
  208.         claimed=TRUE;
  209.         break;
  210.  
  211.       case keycode_COPY:
  212.       case keycode_CTRL_CURSORDOWN:
  213.         Window_SetScroll(window,Window_GetScrollX(window),-(0x07fffff));
  214.         claimed=TRUE;
  215.         break;
  216.  
  217.       case keycode_ESCAPE:
  218.         if (window!=windows.groups) NewsGroups_MakeActive(event, NULL);
  219.         Window_Hide(window);
  220.         claimed=TRUE;
  221.         break;
  222.  
  223.       case keycode_RETURN:
  224.       case ' ':
  225.       case keycode_CURSORRIGHT:
  226.         {
  227.           if (window==windows.articles)
  228.           {
  229.             int i;
  230.  
  231.             i=-1;
  232.             i=ArtList_FirstUnread();
  233.             if (i!=-1)
  234.             {
  235.               newsbase_getarticle(i,0);
  236.             }
  237.             else
  238.             {
  239.               NewsGroups_MakeActive(event, NULL);
  240.               Window_Hide(windows.articles);
  241.             }
  242.             claimed=TRUE;
  243.           }
  244.  
  245.           if (window==windows.threads)
  246.           {
  247.             int i;
  248.  
  249.             i=Threads_NextUnread(threads);
  250.             if (i!=-1)
  251.             {
  252.               WimpMsgs_RequestArticle(i,0);
  253.             }
  254.             else
  255.             {
  256.               NewsGroups_MakeActive(event, NULL);
  257.               Window_Hide(windows.threads);
  258.               Article_CloseArticleDisplay();
  259.             }
  260.             claimed=TRUE;
  261.           }
  262.  
  263.           if (window==windows.groups)
  264.           {
  265.             int i;
  266.  
  267.             i=NewsGroups_GroupWithUnread();
  268.             if ((i>=0) && (busy==FALSE))
  269.             {
  270.               Threads_DeselectAll();
  271.               ArtList_DeselectAll();
  272.               Threads_DeleteList(&threads);
  273.               Window_Hide(windows.threads);
  274.               if(artlist!=NULL) ArtList_DeleteList(&artlist);
  275.               Window_Hide(windows.articles);
  276.               Article_CloseArticleDisplay();
  277.               Misc_SetBusyFlag();
  278.               WimpMsgs_StartArticleListByGroupnum(i, FALSE);
  279.             }
  280.             claimed=TRUE;
  281.           }
  282.  
  283.         }
  284.         break;
  285.  
  286.       default:
  287.         break;
  288.     }
  289.   }
  290.  
  291.   if (event->data.key.caret.window == windows.article)
  292.   {
  293.     switch(event->data.key.code)
  294.     {
  295.       case keycode_F3:
  296.       case keycode_SHIFT_F3:
  297.       case keycode_CTRL_F3:
  298.         {
  299.           mouse_block ptrinfo;
  300.  
  301.           Wimp_GetPointerInfo(&ptrinfo);
  302.           Misc_SetSaveBoxExtent(1);
  303.           Icon_SetText(windows.savebox, 1, "file_fff");
  304.           Menu_Show((menu_ptr)windows.savebox,ptrinfo.pos.x-50,ptrinfo.pos.y+50);
  305.           filesavetype=1;
  306.  
  307.           Icon_SetCaret(windows.savebox,0);
  308.         }
  309.         claimed=TRUE;
  310.         break;
  311.  
  312.       case keycode_ESCAPE:
  313.         Article_CloseArticleDisplay();
  314.         claimed=TRUE;
  315.         break;
  316.  
  317.       case 'x':
  318.       case 'X':
  319.         if (rot13==TRUE)
  320.         {
  321.           rot13=FALSE;
  322.         }
  323.         else
  324.         {
  325.           rot13=TRUE;
  326.         }
  327.         Window_MarkInvalid(windows.article);
  328.         claimed=TRUE;
  329.         break;
  330.  
  331.       case 'm':
  332.       case 'M':
  333.         Misc_ClickOK(windows.readaction,6);
  334.         ArtGen_OpenNewEmail(FALSE);
  335.         claimed=TRUE;
  336.         break;
  337.  
  338.       case 'P':
  339.       case 'p':
  340.         if (readingemail!=TRUE)
  341.         {
  342.           Misc_ClickOK(windows.readaction,5);
  343.           ArtGen_OpenNewPost(artlistgrp->name,FALSE);
  344.           claimed=TRUE;
  345.         }
  346.         break;
  347.  
  348.       case ' ':
  349.         if (endofarticle==TRUE)
  350.         {
  351.           Misc_ClickOK(windows.readaction,2);
  352.           ArtList_NextArticle(curthread);
  353.         }
  354.         else
  355.         {
  356.           Article_PageDown();
  357.         }
  358.         claimed=TRUE;
  359.         break;
  360.  
  361.       case 'N':
  362.       case 'n':
  363.       case keycode_CURSORRIGHT:
  364.         Misc_ClickOK(windows.readaction,2);
  365.         ArtList_NextArticle(curthread);
  366.         claimed=TRUE;
  367.         break;
  368.  
  369.       case 'B':
  370.       case 'b':
  371.       case keycode_CURSORLEFT:
  372.         Misc_ClickOK(windows.readaction,0);
  373.         ArtList_PreviousArticle(curthread);
  374.         claimed=TRUE;
  375.         break;
  376.  
  377.       case 'F':
  378.       case 'f':
  379.         if (readingemail!=TRUE)
  380.         {
  381.           Misc_ClickOK(windows.readaction,3);
  382.           ArtGen_OpenNewPost(nullstring, TRUE);
  383.           claimed=TRUE;
  384.         }
  385.         break;
  386.  
  387.       case 'R':
  388.       case 'r':
  389.         Misc_ClickOK(windows.readaction,4);
  390.         ArtGen_OpenNewEmail(TRUE);
  391.         claimed=TRUE;
  392.         break;
  393.  
  394.       case 'u':
  395.       case 'U':
  396.         ReadFlag_MarkUnread(artlistgrp, currentartnum, curgrpnum);
  397.         claimed=TRUE;
  398.         break;
  399.  
  400.       case 'l':
  401.       case 'L':
  402.         if (Icon_GetSelect(windows.readaction,15)!=0)
  403.         {
  404.           WimpMsgs_LockArticle(currentartnum, artlistgrp->name);
  405.           Icon_SetSelect(windows.readaction,15, 0);
  406.         }
  407.         else
  408.         {
  409.           WimpMsgs_UnlockArticle(currentartnum, artlistgrp->name);
  410.           Icon_SetSelect(windows.readaction,15,1);
  411.         }
  412.         claimed=TRUE;
  413.         break;
  414.  
  415.       case keycode_CURSORUP:
  416.         Window_ScrollUp(windows.article, 36);
  417.         claimed=TRUE;
  418.         break;
  419.  
  420.       case keycode_CURSORDOWN:
  421.         Window_ScrollDown(windows.article, 36);
  422.         claimed=TRUE;
  423.         break;
  424.  
  425.       case keycode_PAGEUP:
  426.         Article_PageUp();
  427.         claimed=TRUE;
  428.         break;
  429.  
  430.       case keycode_PAGEDOWN:
  431.         Article_PageDown();
  432.         claimed=TRUE;
  433.         break;
  434.  
  435.       case keycode_HOME:
  436.       case keycode_CTRL_CURSORUP:
  437.         Window_SetScroll(windows.article,Window_GetScrollX(windows.article),0);
  438.         claimed=TRUE;
  439.         break;
  440.  
  441.       case keycode_COPY:
  442.       case keycode_CTRL_CURSORDOWN:
  443.         Window_SetScroll(windows.article,Window_GetScrollX(windows.article),-(nlines*36));
  444.         claimed=TRUE;
  445.         break;
  446.  
  447.       case 'D':
  448.       case 'd':
  449.         Uucode_Decode();
  450.         claimed=TRUE;
  451.         break;
  452.  
  453.       case keycode_DELETE:
  454.         if (Icon_GetShade(windows.readaction,1)==FALSE)
  455.         {
  456.           WimpMsgs_DeleteArticle(currentartnum, artlistgrp->name);
  457.           ArtList_NextArticle(curthread);
  458.           claimed=TRUE;
  459.           Misc_ClickOK(windows.readaction,1);
  460.         }
  461.     break;
  462.  
  463.       default:
  464.         break;
  465.     }
  466.   }
  467.  
  468.   if (claimed == FALSE)
  469.   {
  470.     Wimp_ProcessKey(event->data.key.code);
  471.   }
  472.  
  473.   return claimed;
  474. }
  475.